import { _decorator, Component, Node } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('TimeUtil')
export class TimeUtil extends Component {
    /**
     * 延迟执行函数
     * @param fn 回调函数
     * @param ts 毫秒
     */
    public static delayTime(fn:Function, ts:number):number{
        return setTimeout(()=>{
            if(null != fn) fn();
        }, ts);
    }

    /**
     * 清理
     * @param id 
     */
    public static clearTimeout(id:number):void{
        clearTimeout(id);
    }
    /**
     * 
     * @param id 
     */
    public static clearTimesId(id:number):void{
        clearInterval(id);
    }
    /**
     * 延迟执行函数
     * @param fn 回调函数
     * @param ts 秒
     */
    public static scheduleOnce(fn:Function, ts:number):number{
        return TimeUtil.delayTime(fn, ts);
    }
    /**
     * 
     * @param fn 
     * @param interval 单位为秒
     * @param totalTime 单位为秒
     */
    public static scheduleLoop(fn:Function, interval:number, totalTime:number):number{
        //
        var leftTime:number = totalTime;
        //
        if(null != fn) fn(leftTime);
        //
        var timeId = setInterval((ts)=>{
            leftTime--;
            if(null != fn) fn(leftTime);
            //
            if(leftTime <= 0){
                this.clearTimesId(timeId);
            }
        }, interval*1000);
        // 
        return timeId;
    }

}

